package top.lixunda.ecommerce.server.good.api.controller;

import com.baomidou.mybatisplus.core.metadata.IPage;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;
import top.lixunda.commerce.common.core.entity.MessageObject;
import top.lixunda.common.validate.XumValid;
import top.lixunda.ecommerce.server.business.api.entity.dto.PageDTO;
import top.lixunda.ecommerce.server.good.api.entity.db.EnshrineGoodsDO;
import top.lixunda.ecommerce.server.good.api.entity.vo.GoodConvertVO;
import top.lixunda.ecommerce.server.good.api.entity.dto.EnshrineGoodQueryDTO;
import top.lixunda.ecommerce.server.good.api.entity.vo.EnshrineGoodVO;

import java.util.List;

/**
 * <p>
 * Feign客户端，接口调用
 * 商品收藏
 * </p>
 * @author Xumda
 * @version time:2020/1/7 15:13
 */
@SuppressWarnings("unused")
@Api("商品收藏")
@RequestMapping("/enshrine-goods")
public interface IEnshrineGoodsController {

    /**
     * 当前用户收藏一家商品
     *
     * @param id 商品id
     * @return 是否收藏成功
     */
    @ApiOperation("当前用户收藏一家商品")
    @GetMapping("addEnshrineGood")
    MessageObject<Boolean> addEnshrineGood(@RequestParam("id") Integer id);

    /**
     * 当前用户收藏多家商品
     *
     * @param ids 商品id列表
     * @return 收藏成功的数目
     */
    @ApiOperation("当前用户收藏一家商品")
    @PostMapping("addEnshrineGoods")
    MessageObject<Integer> addEnshrineGoods(@RequestBody List<Integer> ids);

    /**
     * 移除一个收藏的商品
     *
     * @param id 收藏id
     * @return 是否取消收藏成功
     */
    @ApiOperation("移除一个收藏的商品")
    @GetMapping("removeEnshrineGood")
    MessageObject<Boolean> removeEnshrineGood(@RequestParam("id") Integer id);

    /**
     * 移除多个收藏的商品
     *
     * @param ids 收藏id列表
     * @return 取消收藏的数据
     */
    @ApiOperation("移除多个收藏的商品")
    @PostMapping("removeEnshrineGoods")
    MessageObject<Integer> removeEnshrineGoods(@RequestBody List<Integer> ids);

    /**
     * 获取所有收藏的商品信息
     *
     * @return 收藏商品信息类表
     */
    @ApiOperation("获取所有收藏的商品信息")
    @GetMapping("queryAllEnshrineGoods")
    MessageObject<List<EnshrineGoodVO>> queryAllEnshrineGoods();

    /**
     * 获取所有收藏的商品信息
     *
     * @return 收藏商品信息类表
     */
    @ApiOperation("获取所有收藏的商品信息")
    @GetMapping("queryAllEnshrineConvertGoods")
    MessageObject<List<GoodConvertVO>> queryAllEnshrineConvertGoods();

    /**
     * 根据条件查询商品收藏信息
     *
     * @param enshrineGoodQueryDTO 查询条件
     * @return 收藏商品信息类表
     */
    @ApiOperation("根据条件查询商品收藏信息")
    @PostMapping("queryEnshrineGoodsWrapper")
    MessageObject<List<EnshrineGoodVO>> queryEnshrineGoodsWrapper(
            @RequestBody @XumValid EnshrineGoodQueryDTO enshrineGoodQueryDTO);

    /**
     * 获取所有收藏的商品信息，分页
     *
     * @param pageDTO 分页数据，条件不起作用，若想使用条件请使用queryEnshrineGoodsPageWrapper接口
     * @return 收藏商品信息类表
     * @see IEnshrineGoodsController#queryEnshrineGoodsPageWrapper(PageDTO)
     */
    @ApiOperation("获取所有收藏的商品信息，分页")
    @PostMapping("queryEnshrineGoodsPage")
    MessageObject<IPage<EnshrineGoodVO>> queryEnshrineGoodsPage(
            @RequestBody @XumValid PageDTO<EnshrineGoodsDO, ?> pageDTO);

    /**
     * 根据条件查询商品收藏信息，分页
     *
     * @param pageDTO 分页数据以及查询条件
     * @return 收藏商品信息类表
     */
    @ApiOperation("根据条件查询商品收藏信息，分页")
    @PostMapping("queryEnshrineGoodsPageWrapper")
    MessageObject<IPage<EnshrineGoodVO>> queryEnshrineGoodsPageWrapper(
            @RequestBody @XumValid PageDTO<EnshrineGoodsDO, EnshrineGoodQueryDTO> pageDTO);

    /**
     * 根据id查询收藏数据
     *
     * @param id 收藏id
     * @return 收藏的数据
     */
    @ApiOperation("根据id查询收藏数据")
    @GetMapping("queryById")
    MessageObject<EnshrineGoodVO> queryById(@RequestParam("id") Integer id);

    /**
     * 根据id列表查询收藏多条数据
     *
     * @param ids 收藏id列表
     * @return 收藏的数据
     */
    @ApiOperation("根据id列表查询收藏多条数据")
    @PostMapping("queryByIds")
    MessageObject<List<EnshrineGoodVO>> queryByIds(@RequestBody List<Integer> ids);

}
